home *** CD-ROM | disk | FTP | other *** search
- /*----------------------------------------------------------------------*/
- /* Copyright (c) 1988-1989 */
- /* by CompuServe Inc., Tucson, AZ. All Rights Reserved */
- /* CNVHUF.H can be copied and distributed freely for any */
- /* non-commercial purposes. CNVHUF.H can only be incorporated */
- /* into commercial software with the permission of CompuServe Inc. */
- /*----------------------------------------------------------------------*/
-
- /* Header file CNVHUF.H */
-
- /* Global type definitions for Group 3 FAX work and TIF files */
-
- #define WHITE (0)
- #define BLACK (1)
- #define LONGEST_LINE (2432) /* Longest line we expect */
- #define LONGEST_RLE (1266) /* Most run lengths for longest_line */
- #define FAX_line_width (1728) /* Longest line expected from FAX */
- #define FAX_page_length (4000)
- #define FAX_min_line (24) /* Minimum bits per line (20m sec rule) */
-
- typedef int
- colors; /* The two modes are these */
-
- /* Structures in a TIF file as used by GAMMAfax */
-
- typedef struct
- ifd_tag_record /* Format of tag field(s) */
- {
- int
- IFD_tag, /* TIF tag describing rest of element */
- IFD_type; /* Type of data referred to by IFD_tag */
- long int
- IFD_length; /* Length of data referred to */
- union
- {
- short int
- short_pair[2]; /* 4 bytes are used for either 2 shorts */
- long int
- long_one; /* Or one long value */
- long int
- offset; /* Or pointer to later in the file */
- } params;
- } IFD_tag_body;
-
- typedef struct
- ifd_header_record /* Format of Image File Directory */
- {
- short int
- IFD_ele_cnt;
- IFD_tag_body
- IFD_tag_element[20]; /* IFD_ele_cnt number of these */
- char
- IFD_ptr_params[100]; /* Room for params after directory */
- } IFD_header;
-
- typedef struct
- tif_file_header_record /* Format of TIF header */
- {
- char
- TIF_sign[4]; /* Signature */
- long int
- IFD_offset; /* Offset to first IFD */
- } TIF_header;
-
- /* Standard TAG_tag's (TT's) and contents: */
-
- /* The following their data in line: */
-
- #define TT_width (256) /* Image width follows */
- #define TT_width_type (3) /* uses short integers */
- #define TT_width_cnt (1L) /* uses only one parameter */
-
- #define TT_length (257) /* Image length */
- #define TT_length_type (3) /* uses short integers */
- #define TT_length_cnt (1L) /* uses only one parameter */
-
- #define TT_PixBits (258) /* Bits per pixel */
- #define TT_PixBits_type (3) /* uses short integers */
- #define TT_PixBits_cnt (1L) /* uses only one parameter */
- #define TT_PixBits_par (1) /* Standard value for B/W */
-
- #define TT_Cmprs (259) /* Compression method */
- #define TT_Cmprs_type (3) /* uses short integers */
- #define TT_Cmprs_cnt (1L) /* uses only one parameter */
- #define TT_Cmprs_par (3) /* Standard value for Group3 */
-
- #define TT_Revrs (262) /* Color reversal */
- #define TT_Revrs_type (3) /* uses short integers */
- #define TT_Revrs_cnt (1L) /* uses only one parameter */
- #define TT_Revrs_par (0) /* Standard value for black on white */
-
- #define TT_MSBend (266) /* True if MSB is last */
- #define TT_MSBend_type (3) /* uses short integers */
- #define TT_MSBend_cnt (1L) /* uses only one parameter */
- #define TT_MSBend_par (1) /* Standard value for FAX */
-
- #define TT_Orient (274) /* True if top left is (0,0) */
- #define TT_Orient_type (3) /* uses short integers */
- #define TT_Orient_cnt (1L) /* uses only one parameter */
- #define TT_Orient_par (1) /* Standard value for FAX */
-
- #define TT_Samps (277) /* Number of samples per pixel */
- #define TT_Samps_type (3) /* uses short integers */
- #define TT_Samps_cnt (1L) /* uses only one parameter */
- #define TT_Samps_par (1) /* Standard value for FAX */
-
- #define TT_Grp3Opt (292) /* Encoding scheme within group III */
- #define TT_Grp3Opt_type (4) /* Uses long integers */
- #define TT_Grp3Opt_cnt (1L) /* uses only one parameter */
- #define TT_Grp3Opt_par (0) /* Standard value for Huffman */
-
- #define TT_Resol (296) /* Resolution unit (none, inch, cm ) */
- #define TT_Resol_type (3) /* uses short integers */
- #define TT_Resol_cnt (1L) /* uses only one parameter */
- #define TT_Resol_par (2) /* Standard value for FAX density */
-
- #define TT_PagNum (297) /* This page, Total pages */
- #define TT_PagNum_type (3) /* uses short integers */
- #define TT_PagNum_cnt (2L) /* uses two parameters */
- #define TT_PagNum_par1 (1) /* Standard values for first page */
- #define TT_PagNum_par2 (1) /* of only one page */
-
- /* The following use pointers to their data: */
- /* The pointers are integer byte numbers that the data starts
- on in the file */
-
- #define TT_Title (270) /* Title generated by FAX */
- #define TT_Title_type (2) /* Uses text */
-
- #define TT_Image (273) /* Image generated by FAX */
- #define TT_Image_type (3) /* Integers */
-
- #define TT_X_dense (282) /* X_dense generated by FAX */
- #define TT_X_dense_cnt (1L) /* Only one parameter */
- #define TT_X_dense_type (5) /* Rational fraction */
- #define TT_X_dense_par1 (204) /* 204 dots per */
- #define TT_X_dense_par2 (1) /* 1 inch */
-
- #define TT_Y_dense (283) /* Y_dense generated by FAX */
- #define TT_Y_dense_cnt (1L) /* Only one parameter */
- #define TT_Y_dense_type (5) /* Rational fraction */
- #define TT_Y_dense_par1 (196) /* 196 dots per */
- #define TT_Y_dense_par2 (1) /* 1 inch */
-
- /* Other fields: */
-
- #define TIF_sign_par "II*\000" /* Text at beginning of TIF file */
- #define TIF_msc_1 ((8,0)) /* Additional data there */
-
- typedef int
- INTER_ARR1[LONGEST_RLE]; /* Highest number of runs in a line */
-
- typedef struct
- rle_line_record
- {
- int
- line_length, /* Total pixels on line */
- rle_count, /* Total run-lengths here */
- rle_pointer; /* Current entry in rle_list */
- colors
- rle_color; /* Color of current run */
- int
- rle_start_column, /* Starting column of rle_pointer */
- current_column; /* Current pixel position */
- INTER_ARR1
- rle_list;
- } rle_line;
-
- typedef int
- node_label; /* Used for last 4 bits of code */
-
- typedef struct
- huffman_node_record { /* There is one record per 8 bit possibility */
- unsigned char bits_consumed; /* Significant bits in this entry */
- int run_length; /* (if over 8 insert 0 here */
- } huffman_node;
-
- typedef huffman_node
- table_1st_bits[256][2],
- table_end_bits[16];
-
- typedef struct
- huffman_code_record { /* There is one record for each array entry */
- unsigned char
- code_bits; /* Length of following code */
- short int
- code_value; /* The code itself */
- } huffman_code;
-
- typedef char
- file_name_string[(20)+1];
-
- /* Declare globals */
-
- extern int
- scan_lines;
-